import 'package:get_it/get_it.dart';
import 'package:mobile_app.home.collections.core/core/domain/helpers/apply_custom_collection_lexical_item_removal/helper.dart';
import 'package:mobile_app.home.collections.core/core/domain/helpers/apply_custom_collection_list_item_deletion/helper.dart';
import 'package:mobile_app.home.collections.core/core/domain/helpers/apply_lexical_item_deletion/helper.dart';
import 'package:mobile_app.home.collections.core/core/domain/helpers/create_custom_collection/helper.dart';
import 'package:mobile_app.home.collections.core/core/domain/helpers/create_lexical_item_sorting_from_collection_sorting/helper.dart';
import 'package:mobile_app.home.collections.core/core/domain/helpers/filter_custom_collection_exclusive_lexical_item_ids/helper.dart';
import 'package:mobile_app.home.collections.core/core/domain/helpers/filter_custom_lexical_item_ids/helper.dart';
import 'package:mobile_app.home.collections.core/core/domain/helpers/filter_lexical_items_by_prefix/helper.dart';
import 'package:mobile_app.home.collections.core/core/domain/helpers/filter_nonexistent_lexical_item_ids/helper.dart';
import 'package:mobile_app.home.collections.core/core/domain/helpers/is_lexical_item_title_prefix/helper.dart';
import 'package:mobile_app.home.collections.core/core/domain/helpers/validate_custom_collection_folder_title/helper.dart';
import 'package:mobile_app.home.collections.core/core/domain/helpers/validate_custom_collection_title/helper.dart';

final sl = GetIt.asNewInstance();

Future<void> init() async {
  sl.registerLazySingleton<ApplyCustomCollectionLexicalItemRemoval>(() {
    return const ApplyCustomCollectionLexicalItemRemovalImpl();
  });

  sl.registerLazySingleton<ApplyCustomCollectionListItemDeletion>(() {
    return const ApplyCustomCollectionListItemDeletionImpl();
  });

  sl.registerLazySingleton<ApplyLexicalItemDeletion>(() {
    return const ApplyLexicalItemDeletionImpl();
  });

  sl.registerLazySingleton<CreateCustomCollection>(() {
    return const CreateCustomCollectionImpl();
  });

  sl.registerLazySingleton<CreateLexicalItemSortingFromCollectionSorting>(() {
    return const CreateLexicalItemSortingFromCollectionSortingImpl();
  });

  sl.registerLazySingleton<FilterCustomCollectionExclusiveLexicalItemIds>(() {
    return const FilterCustomCollectionExclusiveLexicalItemIdsImpl();
  });

  sl.registerLazySingleton<FilterCustomLexicalItemIds>(() {
    return const FilterCustomLexicalItemIdsImpl();
  });

  sl.registerLazySingleton<FilterLexicalItemsByPrefix>(() {
    return const FilterLexicalItemsByPrefixImpl();
  });

  sl.registerLazySingleton<FilterNonexistentLexicalItemIds>(() {
    return const FilterNonexistentLexicalItemIdsImpl();
  });

  sl.registerLazySingleton<IsLexicalItemTitlePrefix>(() {
    return const IsLexicalItemTitlePrefixImpl();
  });

  sl.registerLazySingleton<ValidateCustomCollectionFolderTitle>(() {
    return const ValidateCustomCollectionFolderTitleImpl();
  });

  sl.registerLazySingleton<ValidateCustomCollectionTitle>(() {
    return const ValidateCustomCollectionTitleImpl();
  });
}
